package utils

import (
	"regexp"
	"strings"
)

type regitem struct {
	raw   string
	regex *regexp.Regexp
}

type Reglst struct {
	lst []*regitem
}

func NewReglst() *Reglst {
	rval := &Reglst{}
	return rval
}

func (this *Reglst) Reload(s string, sep string) {
	strs := strings.Split(s, sep)
	lst := make([]*regitem, 0, len(strs))
	for i := 0; i < len(strs); i++ {
		str := Trim(strs[i])
		if len(str) > 0 {
			itm := &regitem{raw: str}
			itm.regex, _ = regexp.Compile(str)
			lst = append(lst, itm)
		}
	}
	this.lst = lst
}

func (this *Reglst) Match(s string) int {
	lst := this.lst
	for i := 0; i < len(lst); i++ {
		itm := lst[i]
		if itm.raw == s {
			return i
		}
		if itm.regex != nil && itm.regex.MatchString(s) {
			return i
		}
	}
	return -1
}
